<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 浅拷贝
        const obj = {
            uname: 'ikun',
            age: 18,
            hot: ['sing', 'docen', 'rap'],
            fan: {
                uname: '里斯',
                age: 20,
            },
        }
        // 浅拷贝
        // 1.for in
        // for(let k in obj){
        //     newObj[k] = obj[k]
        // }

        // 2.Objcet.assign()
        // Object.assign(newObj,obj)

        // 3.展开运算符
        // newObj = {...obj}


        // 深拷贝
        // 1.JSON
        // const newObj = JSON.parse(JSON.stringify(obj))

        // 2.递归函数实现深拷贝
        function cloneDeep(newObj, oldobj) {
            for (let k in oldobj) {
                // 判断这一项是不是数组,是数组再次调用cloneDeep函数,直到不为数组
                if (oldobj[k] instanceof Array) {
                    //newObj 赋值为空数组,用于接收数组的数据
                    newObj[k] = []
                    cloneDeep(newObj[k], oldobj[k])
                    // 判断这一项是不是对象,是对象再次调用cloneDeep函数,直到不为对象
                } else if (oldobj[k] instanceof Object) {
                    //newObj 赋值为空对象,用于接收对象的数据
                    newObj[k] = {}
                    cloneDeep(newObj[k], oldobj[k])
                } else {
                    // 最后为基本数据类型的时候将值赋值给newObj
                    newObj[k] = oldobj[k]
                }

            }
        }
        let newObj = {}
        cloneDeep(newObj, obj)
        console.log(newObj)
        newObj.hot[0] = '只因你太美'
        console.log(obj)
    </script>
</body>

</html>